from flask import Flask, current_app  # 导入flask的current_app(当前app)
from utils import scheduler  # 很关键的一步 导入utils.__init__.py 初始化后的scheduler对象
from utils.cache_helper import cache
from create import create_app


APP = None


def get_app():
    global APP
    APP = APP if APP is not None else create_app()

from utils.db_helper import DBHelper


db = DBHelper()  # PooledDB初始化一次，不要多次初始化

class MyService:
    # 多线程中调用该方法即可
    def select_data(self):
        conn, cursor=db.get_conn()
        cursor.execute('SELECT * FROM data')
        for row in cursor.fetchall():
            print(row['id'])

    @classmethod
    def my_job(cls, job_name):
        # # # 此方法在定时任务多的情况下，会有性能问题，少的情况没啥问题
        # app = create_app()
        # with app.app_context():
        #     current_app.logger.info("my_job已执行")
        # #     print(f"my_job,当前时间{datetime.now()}")
        # # 使用全局APP变量
        # get_app()
        # with APP.app_context():
        #     current_app.logger.info(f"{job_name}已执行")
        #     print(f"my_job,当前时间{datetime.now()}")

        with scheduler.app.app_context():  # 这个sheduler是带有app及其上下文的
            current_app.logger.info(f"{job_name}已执行")
    @staticmethod
    def set_my_cache():
        # 写入缓存，过期时间为60秒
        cache.set('my_cache', "你好！cache", timeout=60)

    @staticmethod
    def get_my_cache():
        # 读取缓存
        my_cache = cache.get('my_cache')
        return my_cache

    @classmethod
    def my_job(cls, job_name):
        # # # 此方法在定时任务多的情况下，会有性能问题，少的情况没啥问题
        # app = create_app()
        # with app.app_context():
        #     current_app.logger.info("my_job已执行")
        # #     print(f"my_job,当前时间{datetime.now()}")
        # # 使用全局APP变量
        # get_app()
        # with APP.app_context():
        #     current_app.logger.info(f"{job_name}已执行")
        #     print(f"my_job,当前时间{datetime.now()}")

        with scheduler.app.app_context():   # 这个sheduler是带有app及其上下文的
            current_app.logger.info(f"{job_name}已执行")